let list = new Set([]);

const ruleElement = document.getElementById("rule");

document.getElementById("execute").addEventListener("click", () => {
  const rule = ruleElement?.value;
  // 向当前活动的选项卡发送消息
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    chrome.tabs.sendMessage(tabs[0].id, { action: "execute", data: { rule } });
  });
});

document.getElementById("down").addEventListener("click", () => {
  const myArray = Array.from(list);
  let index = 0;
  const intervalId = setInterval(() => {
    if (index < myArray.length) {
      const url = removeLastUnderscoreAndAfter(myArray[index]);
      const name = extractFilenameFromUrl(url);
      downloadFile(name, url);
      index++;
    } else {
      clearInterval(intervalId); // 清除定时器，结束遍历
    }
  }, 300);
});

// 接收内容脚本的返回消息
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.action === "result") {
    const resultContainer = document.getElementById("result");
    // 清空之前的结果
    resultContainer.innerHTML = "";
    list.clear();

    if (!message.data || message.data.length === 0) {
      resultContainer.innerHTML = "没有找到任何结果";
    } else {
      // 将结果数组显示为列表
      message.data.forEach((item) => {
        list.add(item);
        const listItem = document.createElement("li");
        const imgItem = document.createElement("img");
        imgItem.src = item;
        listItem.appendChild(imgItem);
        resultContainer.appendChild(listItem);
      });
    }
  }
});

// ----------------------------------------------------------

// 下载文件
function downloadFile(fileName, fileUrl) {
  // 创建一个隐藏的<a>元素用于触发下载
  const anchor = document.createElement("a");
  anchor.href = fileUrl;
  anchor.download = fileName;

  // 将元素添加到DOM中
  document.body.appendChild(anchor);

  // 触发下载
  anchor.click();

  // 下载完成后移除该元素
  document.body.removeChild(anchor);
}

function downloadFileFromBlob(fileName, fileUrl) {
  fetch(fileUrl)
    .then((response) => response.blob())
    .then((blob) => {
      const url = window.URL.createObjectURL(blob);
      const anchor = document.createElement("a");
      anchor.href = url;
      anchor.download = fileName;

      document.body.appendChild(anchor);
      anchor.click();
      document.body.removeChild(anchor);

      // 释放内存中的URL对象
      window.URL.revokeObjectURL(url);
    })
    .catch((error) => console.error("File download error:", error));
}

// 提取文件名
function extractFilenameFromUrl(url) {
  // 如果 url 为空，返回空字符串
  if (!url) return "";

  // 移除查询参数和哈希
  url = url.split("?")[0].split("#")[0];

  // 尝试从路径中获取文件名
  let filename = url.split("/").pop();

  // 如果文件名为空（URL 以斜杠结尾），返回 'download'
  if (!filename) return "download";

  // 解码 URL 编码的字符
  filename = decodeURIComponent(filename);

  // 移除不安全的文件名字符
  filename = filename.replace(/[^a-zA-Z0-9._-]/g, "_");

  // 如果文件名仍然为空，使用默认名称
  return filename || "download";
}

// 移除字符串中最后一个特殊字符(下划线)及其之后的内容
function removeLastUnderscoreAndAfter(str, delimiter = "_") {
  // 移除查询参数和哈希
  str = str.split("?")[0].split("#")[0];
  const lastUnderscoreIndex = str.lastIndexOf(delimiter);

  if (lastUnderscoreIndex === -1) {
    return str;
  }

  return str.substring(0, lastUnderscoreIndex); // 截取到最后一个下划线之前的内容
}
